#ifndef TRGAMEWORLD_H
#define TRGAMEWORLD_H

#include <irrlicht.h>
#include "trEventNode.h"
#include "trGameObject.h"
#include "trGameDevice.h"

/*
Abstract base class
this is only a shell on which
to build more custom functioning
worlds. "Build a game not an engine
*/

namespace tetra
{

class trGameDevice;

class trGameWorld : public trEventNode
{

    // these groups are specific to
    // one type of world
    // not standard abstract class

/////
//
/////

// put these into an array of arrays <.>
    trGameObjectArray* simulate_group;

    trGameObjectArray* sleep_group;

    trGameObjectArray* phase_out_group;

    trGameDevice* game_device;

public:

    //! Default constructor
    trGameWorld();

    //! Destructor
    ~trGameWorld();

    //! Adds an object to the game object group 'group'.
    virtual void addGameObject( const trGameObject& object_new, const trGameObjectArray& group );

    //! Removes an object from the game object group 'group'.
    virtual void removeGameObject( const trGameObject& object, const trGameObjectArray& group );

    //! Returns a pointer to the group.
    virtual trGameObjectArray* getGroup(  );

};

}; //end namespace tetra

#endif //TRGAMEWORLD_H
